/*
 * Copyright 2015 Victor Albertos
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package io.rx_cache;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * A migration configuration.
 */
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Migration {
  /**
   * Migration number version. The first migration should start with 1
   * 每次清理完需要数据迁移的缓存时,会将version值最大的@Migration的version值保存到本地
   *
   * @SchemeMigration({
   *  *             @Migration(version = 1, evictClasses = {Mock.class}),
   *  *             @Migration(version = 3, evictClasses = {Mock3.class}),
   *  *             @Migration(version = 2, evictClasses = {Mock2.class})
   *  *     })
   *  * interface Providers {}
   */
  int version();

  /**
   * Classes to be evicted due to inconsistency properties regarding prior migrations. It means when
   * a new field of a class has been added. Deleting classes or deleting fields of classes would be
   * handle automatically by RxCache.
   */
  Class[] evictClasses();
}
